/*
 * @Description:
 * @Author: Junhuang
 * @Date: 2022-05-27 16:09:29
 * @LastEditTime: 2022-06-01 20:11:02
 * @LastEditors: Junhuang
 * @Reference:
 */
'use strict';
// 引入
module.exports = app => {
  const { INTEGER, STRING, DATE } = app.Sequelize;
  // 配置（重要：一定要配置详细，一定要！！！）
  const Plan = app.model.define('plan', {
    id: {
      type: INTEGER(20),
      allowNull: true,
      primaryKey: true,
      autoIncrement: true,
    },
    user_id: {
      type: INTEGER,
      allowNull: false,
      defaultValue: 0,
      comment: '用户id',
    },
    pdate: {
      type: DATE,
      allowNull: true,
      comment: '计划日期',
    },
    title: {
      type: STRING(100),
      allowNull: false,
      defaultValue: '',
      comment: '视频标题',
    },
    poster: {
      type: STRING,
      allowNull: true,
      defaultValue: '',
      comment: '视频封面',
    },
    video: {
      type: STRING,
      allowNull: true,
      defaultValue: '',
      comment: '视频地址',
    },
    video2: {
      type: STRING,
      allowNull: true,
      defaultValue: '',
      comment: '视频地址2',
    },
    advice: {
      type: STRING,
      allowNull: true,
      defaultValue: '',
      comment: '点评',
    },
    rate: {
      type: INTEGER,
      defaultValue: 0,
      comment: '评分',
    },
    uploaded_time: {
      type: DATE,
      // 获取器，对获取的数据库中的字段进行处理，此处将数据库中的时间字段转换为timestamp
      get() {
        const val = this.getDataValue('uploaded_time');
        if (val) {
          return (new Date(val)).getTime();
        }
        return val;
      },
    },
    adviced_time: {
      type: DATE,
      // 获取器，对获取的数据库中的字段进行处理，此处将数据库中的时间字段转换为timestamp
      get() {
        const val = this.getDataValue('adviced_time');
        if (val) {
          return (new Date(val)).getTime();
        }
        return val;
      },
    },
    feedback_time: {
      type: DATE,
      // 获取器，对获取的数据库中的字段进行处理，此处将数据库中的时间字段转换为timestamp
      get() {
        const val = this.getDataValue('feedback_time');
        if (val) {
          return (new Date(val)).getTime();
        }
        return val;
      },
    },
    status: { type: INTEGER, allowNull: false, defaultValue: 1, comment: '状态' },
    created_time: {
      type: DATE,
      // 获取器，对获取的数据库中的字段进行处理，此处将数据库中的时间字段转换为timestamp
      get() {
        const val = this.getDataValue('created_time');
        return (new Date(val)).getTime();
      },
    },
    updated_time: {
      type: DATE,
      // 获取器，对获取的数据库中的字段进行处理，此处将数据库中的时间字段转换为timestamp
      get() {
        const val = this.getDataValue('updated_time');
        return (new Date(val)).getTime();
      },
    },
  }, {
    timestamps: true, // 是否自动写入时间戳
    tableName: 'plan', // 自定义数据表名称
    scopes: {
      active: {
        where: {
          status: 1,
        },
      },
    },
  });
  // 关联关系
  Plan.associate = function() {
    // 关联作者
    Plan.belongsTo(app.model.User, {
      foreignKey: 'user_id',
    });
  };
  return Plan;
};
